dnl ***************************************************************************
dnl xpc_qt3.m4
dnl ---------------------------------------------------------------------------
dnl
dnl \file       	xpc_qt3.m4
dnl \library    	xpc_suite subproject
dnl \author     	Chris Ahlstrom
dnl \date       	02/29/2008-02/29/2008
dnl \version    	$Revision$
dnl \license    	$XPC_SUITE_GPL_LICENSE$
dnl
dnl   Check for Qt compiler flags, linker flags, and binary packages.  This
dnl   is meant for Qt version 2 and 3.
dnl
dnl ---------------------------------------------------------------------------

AC_DEFUN([AC_XPC_QT3],
[
AC_REQUIRE([AC_PROG_CXX])
AC_REQUIRE([AC_PATH_X])

AC_MSG_CHECKING([QTDIR])
AC_ARG_WITH([qtdir], [  --with-qtdir=DIR        Qt installation directory [default=$QTDIR]], QTDIR=$withval)

dnl Check that QTDIR is defined or that --with-qtdir is given.

if test x"$QTDIR" = x ; then
   QT_SEARCH="/usr/lib/qt31 /usr/local/qt31 /usr/lib/qt3 /usr/local/qt3 /usr/lib/qt2 /usr/local/qt2 /usr/lib/qt /usr/local/qt"
   for i in $QT_SEARCH; do
      if test -f $i/include/qglobal.h -a x$QTDIR = x; then QTDIR=$i; fi
   done
fi
if test x"$QTDIR" = x ; then
   AC_MSG_ERROR([*** QTDIR must be defined, or --with-qtdir option provided])
fi
AC_MSG_RESULT([$QTDIR])

dnl Change backslashes in QTDIR to forward slashes to prevent escaping
dnl problems later on in the build process, mainly for Cygwin build
dnl environment using MSVC as the compiler.
dnl
dnl TODO: Use sed instead of perl.
dnl

QTDIR=`echo $QTDIR | perl -p -e 's/\\\\/\\//g'`

dnl Figure out which version of Qt we are using

AC_MSG_CHECKING([Qt version])
QT_VER=`grep 'define.*QT_VERSION_STR\W' $QTDIR/include/qglobal.h | perl -p -e 's/\D//g'`

case "${QT_VER}" in
   2*)
      QT_MAJOR="2"
   ;;
   3*)
      QT_MAJOR="3"
   ;;
   *)
      AC_MSG_ERROR([*** Don't know how to handle this Qt major version])
   ;;
esac
AC_MSG_RESULT([$QT_VER ($QT_MAJOR)])

dnl Check that the moc processor is in the path.

AC_CHECK_PROG(MOC, moc, moc)
if test x$MOC = x ; then
   AC_MSG_ERROR([*** moc must be in path])
fi

dnl Check that the uic program is the Qt user interface compiler.

AC_CHECK_PROG(UIC, uic, uic)
if test x$UIC = x ; then
   AC_MSG_ERROR([*** uic must be in path])
fi

dnl qembed is the Qt data embedding utility.  It is located in
dnl $QTDIR/tools/qembed, and must be compiled and installed manually.  If it
dnl isn't present, this script will allow that situation

AC_CHECK_PROG(QEMBED, qembed, qembed)

dnl Calculates the Qt include path.

QT_CXXFLAGS="-I$QTDIR/include"
QT_IS_EMBEDDED="no"

dnl On UNIX, figure out if we're doing a static or dynamic link

case "${host}" in
   *-cygwin)
	AC_DEFINE_UNQUOTED(WIN32, "", Defined if on Win32 platform)
      if test -f "$QTDIR/lib/qt.lib" ; then
         QT_LIB="qt.lib"
         QT_IS_STATIC="yes"
         QT_IS_MT="no"
      elif test -f "$QTDIR/lib/qt-mt.lib" ; then
         QT_LIB="qt-mt.lib" 
         QT_IS_STATIC="yes"
         QT_IS_MT="yes"
      elif test -f "$QTDIR/lib/qt$QT_VER.lib" ; then
         QT_LIB="qt$QT_VER.lib"
         QT_IS_STATIC="no"
         QT_IS_MT="no"
      elif test -f "$QTDIR/lib/qt-mt$QT_VER.lib" ; then
         QT_LIB="qt-mt$QT_VER.lib"
         QT_IS_STATIC="no"
         QT_IS_MT="yes"
      fi
      ;;

   *)
      QT_IS_STATIC=`ls $QTDIR/lib/*.a 2> /dev/null`
      if test "x$QT_IS_STATIC" = x; then
         QT_IS_STATIC="no"
      else
         QT_IS_STATIC="yes"
      fi
      if test x$QT_IS_STATIC = xno ; then
         QT_IS_DYNAMIC=`ls $QTDIR/lib/*.so 2> /dev/null` 
         if test "x$QT_IS_DYNAMIC" = x;  then
            AC_MSG_ERROR([*** Couldn't find any Qt libraries])
         fi
      fi

      if test "x`ls $QTDIR/lib/libqt.* 2> /dev/null`" != x ; then
         QT_LIB="-lqt"
         QT_IS_MT="no"
      elif test "x`ls $QTDIR/lib/libqt-mt.* 2> /dev/null`" != x ; then
         QT_LIB="-lqt-mt"
         QT_IS_MT="yes"
      elif test "x`ls $QTDIR/lib/libqte.* 2> /dev/null`" != x ; then
         QT_LIB="-lqte"
         QT_IS_MT="no"
         QT_IS_EMBEDDED="yes"
      elif test "x`ls $QTDIR/lib/libqte-mt.* 2> /dev/null`" != x ; then
         QT_LIB="-lqte-mt"
         QT_IS_MT="yes"
         QT_IS_EMBEDDED="yes"
      fi
      ;;
esac

AC_MSG_CHECKING([if the Qt library is static])
AC_MSG_RESULT([$QT_IS_STATIC])
AC_MSG_CHECKING([if the Qt library is multithreaded])
AC_MSG_RESULT([$QT_IS_MT])
AC_MSG_CHECKING([if the Qt library is embedded])
AC_MSG_RESULT([$QT_IS_EMBEDDED])

QT_GUILINK=""
QASSISTANTCLIENT_LDADD="-lqassistantclient"

case "${host}" in
   *irix*)
      QT_LIBS="$QT_LIB"
      if test $QT_IS_STATIC = yes ; then
         QT_LIBS="$QT_LIBS -L$x_libraries -lXext -lX11 -lm -lSM -lICE"
      fi
      ;;

   *linux*)
      QT_LIBS="$QT_LIB"
      if test $QT_IS_STATIC = yes && test $QT_IS_EMBEDDED = no; then
         QT_LIBS="$QT_LIBS -L$x_libraries -lXext -lX11 -lm -lSM -lICE -ldl -ljpeg"
      fi
      ;;

   *osf*) 
      # Digital Unix (also know as DGUX or Tru64)

      QT_LIBS="$QT_LIB"
      if test $QT_IS_STATIC = yes ; then
         QT_LIBS="$QT_LIBS -L$x_libraries -lXext -lX11 -lm -lSM -lICE"
      fi
      ;;

   *solaris*)
      QT_LIBS="$QT_LIB"
      if test $QT_IS_STATIC = yes ; then
         QT_LIBS="$QT_LIBS -L$x_libraries -lXext -lX11 -lm -lSM -lICE -lresolv -lsocket -lnsl"
      fi
      ;;

   *win*)
      # linker flag to suppress console when linking a GUI app on Win32

      QT_GUILINK="/subsystem:windows"

	if test $QT_MAJOR = "3" ; then
	    if test $QT_IS_MT = yes ; then
      	QT_LIBS="/nodefaultlib:libcmt"
         else
         	QT_LIBS="/nodefaultlib:libc"
         fi
      fi

      if test $QT_IS_STATIC = yes ; then
         QT_LIBS="$QT_LIBS $QT_LIB kernel32.lib user32.lib gdi32.lib comdlg32.lib ole32.lib shell32.lib imm32.lib advapi32.lib wsock32.lib winspool.lib winmm.lib netapi32.lib"
         if test $QT_MAJOR = "3" ; then
            QT_LIBS="$QT_LIBS qtmain.lib"
         fi
      else
         QT_LIBS="$QT_LIBS $QT_LIB"        
         if test $QT_MAJOR = "3" ; then
            QT_CXXFLAGS="$QT_CXXFLAGS -DQT_DLL"
            QT_LIBS="$QT_LIBS qtmain.lib qui.lib user32.lib netapi32.lib"
         fi
      fi
      QASSISTANTCLIENT_LDADD="qassistantclient.lib"
      ;;

esac

if test x"$QT_IS_EMBEDDED" = "xyes" ; then
   QT_CXXFLAGS="-DQWS $QT_CXXFLAGS"
fi

if test x"$QT_IS_MT" = "xyes" ; then
   QT_CXXFLAGS="$QT_CXXFLAGS -D_REENTRANT -DQT_THREAD_SUPPORT"
fi

QT_LDADD="-L$QTDIR/lib $QT_LIBS"

if test x$QT_IS_STATIC = xyes ; then
   OLDLIBS="$LIBS"
   LIBS="$QT_LDADD"
   AC_CHECK_LIB(Xft, XftFontOpen, QT_LDADD="$QT_LDADD -lXft")
   LIBS="$LIBS"
fi

AC_MSG_CHECKING([QT_CXXFLAGS])
AC_MSG_RESULT([$QT_CXXFLAGS])
AC_MSG_CHECKING([QT_LDADD])
AC_MSG_RESULT([$QT_LDADD])

AC_SUBST(QT_CXXFLAGS)
AC_SUBST(QT_LDADD)
AC_SUBST(QT_GUILINK)
AC_SUBST(QASSISTANTCLIENT_LDADD)

])

dnl ***************************************************************************
dnl xpc_qt3.m4
dnl ---------------------------------------------------------------------------
dnl Local Variables:
dnl End:
dnl ---------------------------------------------------------------------------
dnl vim: ts=3 ft=config
dnl ---------------------------------------------------------------------------
